#ifndef __LJMU_MY_GAMEAPP_H_
#define __LJMU_MY_GAMEAPP_H_

#include "cljmudx10baseapp.h"

// Input
#include "OISInputManager.h"
#include "OISException.h"
#include "OISKeyboard.h"
#include "OISMouse.h"
#include "OISEvents.h"
// Player, Wall and Light Wall Objects
#include "GameObjects.h"
#include "PlayerObjects.h"
// Timer
#include "util_gametimer.h"
// Blur Shader
#include "BlurShader.h"
// Audio
#include <xact3.h>

#include <iostream>
#include <vector>
#include <sstream>
#include <ctime>

using namespace OIS;

class CMyDX10GameApp :	public CDX10BaseApplication
{
public:
	//---------CONSTRUCTORS/DESTRUCTORS-----------------------------------------------
	CMyDX10GameApp(void): CDX10BaseApplication(){}		//Standard Constructor - We Have No Dynamic Data so nothing to Initialise
	virtual ~CMyDX10GameApp(void){}						//Standard Destructor - We Have No Dynamic Data so nothing to cleanup

	//---------METHOD OVERRIDES-------------------------------------------------------
	//Concrete Implementation of our Windows Callback function, needs to handle other types of messages
	virtual LRESULT CALLBACK customWndProc(HWND pwindowhandle, UINT pmessagetype, WPARAM pwparam, LPARAM plparam);
	//Concrete Implementation of our Initialise Method, used to load game content for our game
	virtual bool customInit();
	//Concrete Implementation of our Update Method, used to apply game logic rules and perform sub-component processing
	//such as Audio, AI, Collision Detection, Physics, UI, Character and Sprite Movement etc.
	virtual bool customUpdate();										
	//Concrete Implementation of our Render Method, used to draw our game objects to screen	
	virtual bool customRender();
	//Concrete Implementation of our Cleanup Method, used to destroy dynamic data and unload objects such as textures.
	virtual bool customCleanup();

protected:
	//-------CLASS MEMBERS------------------------------------------------------------
	// Input
	InputManager*				_obj_inputman;				//OIS Input Manager
	Keyboard*					_obj_keyboard;				//OIS Keyboard
	Mouse*						_obj_mouse;					//OIS Mouse
	
	// Timer
	LJMUUtilGameTimer			_obj_timer;					// Timer

/*------
*	BLUR
	CBlurShader*				_blurShader;				// Blur shader object
-------*/

	// Game Objects
	CGameObjects*				_lvl_object;				// Level Object
	CGameObjects*				_wall_object[NUM_OF_WALLS];	// Wall object
	CPlayerObjects*				_player[NUM_OF_PLAYERS];	// Array of players
	CGameObjects*				_light_wall[NUM_OF_PLAYERS];// Light Wall object
};

#endif

